Error Correction Code (ECC) has been utilized to the correction of errors for many years. Unlike parity, which is above to detect but not correct single bit errors, ECC memory typically can detect multiple bit errors and correct single bit errors. If the number of bits used in the ECC syndrome is increased, double bit errors can also be corrected.
ECC memory has been employed in certain devices for many years. For example, hard disc drives, which have known error rates use ECC to detect and correct data errors for sectors written on a magnetic media. ECC is also employed on CD-ROMS.
However, as semiconductor processes have shrunk, the likelihood of soft errors in semiconductor memory, particularly dynamic memory (DRAM), has increased significantly. Consequently, many memory controllers are implementing ECC to detect and correct these soft errors.
Most ECC memory controllers simply generate a code, known as an ECC syndrome, for each data word written to memory. For example, in certain embodiments, the data word may be 16, 32 or 64 bits, and the ECC syndrome may be 6 or more bits, depending on the size of the data word. When that data word is later read from memory, the ECC memory controller compares the stored syndrome to a calculated syndrome. If the syndromes match, then the data is passed to the application or processor requesting the data. If the syndromes do not match, but the ECC memory controller can correct the error, the error is corrected and the data is passed to the application or processor requesting the data. In some cases, the application is notified that a correctable error was detected. Finally, if the syndromes do not match and the ECC memory controller cannot correct the error, a system error or fault is created by the ECC memory controller. This may cause the processor to execute a special exception procedure.
The use of ECC memory may allow controllers to implement many advanced features, which cannot be implemented without the use of ECC memory.
Therefore, it would be beneficial if there was an ECC memory controller that could be utilized to detect certain software errors. This may be advantageous in debugging software programs or in detecting malicious activities.